/**
 * 用于各种校验
 */
export default {
  /**
   * 判断是否是数组
   * @param obj - 数据源
   * @return {Boolean} - 判断结果
   */
  isArray(arrayToCheck) {
    return Array.isArray(arrayToCheck)
  },
  /**
   * 判断是否有效
   * @param data
   * @return {boolean}
   */
  isValid(obj) {
    return !(obj === undefined || obj === null || obj === NaN)
  },
  /**
   * 是否是字符串
   * @param obj
   * @returns {boolean}
   */
  isString(obj) {
    return Object.prototype.toString.call(obj) === '[object String]';
  },
  /**
   * 是否是Boolean
   */
  isBoolean(obj){
    return Object.prototype.toString.call(obj) === '[object Boolean]';
  },
  /**
   * 判断是否是数字,注意NaN也算数字
   * @param obj - 数据源
   * @return {boolean}
   */
  isNumber(obj) {
    return typeof obj === 'number' || /^-?\d+\.?\d+$/.test(obj)
  },
  isNaN(obj) {
    // 先判断是否是数字,再判断是否是NaN,数字中只有NaN是不等于自己本身的.
    return this.isNumber(obj) && obj != +obj
  },
  isFunction(functionToCheck) {
    let getType = {};
    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
  },
  /**
   * 校验是否是空字符串
   * 首先判断是否是字符串,然后再判断其长度...
   * @param {string} stringToCheck - 待校验的字符串
   * @param {boolean } [trim = true] - 是否忽略空格
   */
  isNotBlank(stringToCheck, trim=true){
    return this.isString(stringToCheck) && Boolean((trim ? stringToCheck.trim() : stringToCheck).length)
  },
  /**
   * 校验数组是否不为空
   * @param {array} arrayToCheck - 待校验的数组
   * @return {boolean}
   */
  isNotEmpty(arrayToCheck){
    return this.isArray(arrayToCheck) && arrayToCheck.length
  }
}
